using AiQiuQuan.Sport.Model.Models;
using AiQiuQuan.Sport.Core;

namespace AiQiuQuan.Sport.WebApi.Services
{
    /// <summary>
    /// 场馆数据管理
    /// </summary>
    public interface IVenueService : ITransientDependency
    {
        /// <summary>
        /// 审核提现
        /// </summary>
        Task<UnaryResult> AuditWithdrawAsync(VenueAuditWithdrawRequestDto request);

        /// <summary>
        /// 分页请求
        /// </summary>
        Task<PageResult<VenueInfoDto>> PageListAsync(VenuePageRequestDto request);

        /// <summary>
        /// 查询
        /// </summary>
        Task<VenueInfoDto> GetAsync(Guid id);

        /// <summary>
        /// 教练场馆分页
        /// </summary>
        Task<PageResult<VenueInfoDto>> PageListCoacherAsync(VenuePageRequestDto request);

        /// <summary>
        /// 场馆教练更新
        /// </summary>
        Task<UnaryResult> UpdateVenueCoacherAsync(VenueCoacherUpdateDto request);

        /// <summary>
        /// 场地列表
        /// </summary>
        /// <param name="venueId">场馆ID</param>
        /// <returns></returns>
        Task<List<SiteInfoDto>> GetVenueSiteListAsync(Guid venueId);

        /// <summary>
        /// 场地分页列表
        /// </summary>
        Task<PageResult<SiteInfoDto>> GetVenueSitePageListAsync(VenueSitePageRequestDto request);

        /// <summary>
        /// 场地状态更新
        /// </summary>
        Task<UnaryResult> UpdateSiteStateAsync(VenueSiteStateUpdateDto request);

        /// <summary>
        /// 场地特殊规则分页列表
        /// </summary>
        Task<PageResult<SitePriceSpecialRuleDto>> GetVenueSiteSpecialRulePageListAsync(VenueSitePageRequestDto request);

        /// <summary>
        /// 场馆退款规则分页列表
        /// </summary>
        Task<PageResult<VenueInfoRefundRuleSimpleDto>> GetVenueRefundRulePageListAsync(VenuePageRequestDto request);

        /// <summary>
        /// 场馆退款规则列表
        /// </summary>
        /// <param name="venueId">场馆ID</param>
        /// <returns></returns>
        Task<List<VenueInfoRefundRuleConfigDto>> GetVenueRefundRuleListAsync(Guid venueId);

        /// <summary>
        /// 场地价格特殊规则 列表
        /// </summary>
        /// <param name="siteId">地址ID</param>
        Task<List<SitePriceSpecialRuleDto>> GetPriceSpecialRuleListAsync(Guid siteId);

        /// <summary>
        /// 场地价格特殊规则增加
        /// </summary>
        Task<UnaryResult> AddSiteSpecialRuleAsync(SitePriceSpecialRuleAddDto request);

        /// <summary>
        /// 场地价格特殊规则更新
        /// </summary>
        Task<UnaryResult> UpdateSiteSpecialRuleAsync(SitePriceSpecialRuleUpdateDto request);

        /// <summary>
        /// 场地价格特殊规则状态更新
        /// </summary>
        Task<UnaryResult> UpdateSiteSpecialRuleStateAsync(SitePriceSpecialRuleStateUpdateDto request);

        /// <summary>
        /// 场地价格特殊规则删除
        /// </summary>
        /// <param name="siteSpecialRuleID">场地价格特殊规则ID</param>
        Task<UnaryResult> DeleteSiteSpecialRuleAsync(Guid siteSpecialRuleID);

        /// <summary>
        /// 场馆场地价格列表
        /// </summary>
        Task<SitePriceSimpleDto> GetSitePriceSimpleInfoAsync(SitePriceSimpleRequestDto request);
    }
}
